﻿using System;
using System.Collections.Generic;

namespace VisualTrain
{
	public class Course
	{
		private List<Lab> labs;					// Список лабораторных работ по предмету
		private string name;					// Название предмета
		private string ID;						// Идентификатор предмета
		private string name_teacher;			// ФИО преподавателя по предмету
		private int selectLab;					// Номер выбранной лабораторной работы

		public Course(string ID_Course)
		{
			ID = ID_Course;						// Указываем ID предмета
			labs = new List<Lab> ();			// Список лабораторных работ
			labs.Clear ();						// Очищаем список
			name_teacher = "";					// Задаём ФИО преподавателя
			selectLab = -1;						// Лабораторная работа не выбрана

			// Заполняем название предмета
			name = DataBase.GetString ( String.Format ( "SELECT * FROM [Dis] WHERE [id]={0}", ID ), "Name" );

			FoundLabs ();					// Ищем лабораторные работы по предмету
		}

		// Заполняем лабораторные для текущего предмета
		private int FoundLabs()
		{
			// (Соединить два запроса в один)
			string prepdis_id = DataBase.GetString ( String.Format ( "SELECT * FROM [PrepDis] WHERE [Dis]='{0}' AND [Group]='{1}'", ID, Student.Groups ), "ID" );
			name_teacher = DataBase.GetString ( String.Format ( "SELECT * FROM [Prep] WHERE [ID] IN (SELECT [Prep] FROM [PrepDis] WHERE [ID]='{0}')", prepdis_id ), "FIO" );
			List<string> lab_id = DataBase.GetData ( String.Format ( "SELECT * FROM [Work] WHERE [PrepDis]='{0}'", prepdis_id ), "Lab" );

			for ( int i = 0; i < lab_id.Count; ++i )
			{
				labs.Add ( new Lab (lab_id [i]) );
			}

			return 0;
		}

		// Заполняем список данных о лабораторной работе
		public List<TableItem> LabsList()
		{
			List<TableItem> result = new List<TableItem> ();
			result.Clear ();

			int image;

			for ( int i = 0; i < labs.Count; ++i )
			{
				switch ( labs[i].Mark )
				{
					case "5":
						image = Resource.Drawable.Five;
					break;
					case "4":
						image = Resource.Drawable.Four;
					break;
					case "3":
						image = Resource.Drawable.Three;
					break;
					case "2":
						image = Resource.Drawable.Two;
					break;
					default: 
						image = Resource.Drawable.One;
					break;
				}
				result.Add ( new TableItem (labs [i].Name, labs [i].Start, image) );
			}

			return result;
		}

		// Возвращаем выбранную лабораторную работу
		public Lab Lab
		{
			get
			{
				return labs [selectLab];
			}
		}

		// Запоминаем/возвращаем номер выбранноой работы
		public int SelectLab
		{
			get
			{
				return selectLab;
			}
			set
			{
				selectLab = value;
			}
		}

		// Возвращаем название предмета
		public string Name
		{
			get
			{
				return name;
			}
		}

		// Возвращаем ФИО преподавателя
		public string Teacher
		{
			get
			{
				return name_teacher;
			}
		}
	}
}